package com.himalayan.bear.util;

import com.alibaba.fastjson.JSONObject;

/**
 * 响应工具类
 * 类中所有方法的返回值均为com.alibaba.fastjson.JSONObject
 *
 * @author zhaojk
 * @version 1.0
 * @see JSONObject
 */
public class RespUtil {

    /**
     * 返回成功消息的常量
     *
     * @since 1.0
     */
    public static final JSONObject SUCCESS = msg(true);

    /**
     * 返回失败消息的常量
     *
     * @since 1.0
     */
    public static final JSONObject FAIL = msg(false);

    /**
     * 根据错误代码获取错误消息
     *
     * @param code 错误码
     * @return JSONObject
     * @see MessageEnum
     */
    public static JSONObject msg(int code) {
        if (code > 0) {
            return msg(true);
        }
        MessageEnum m = MessageEnum.codeOf(code);
        if (m == null) {
            return msg(false, "未知的错误消息类型 !");
        }
        return msg(false, m.msg(), null);
    }

    /**
     * 根据boolean变量获取响应消息
     *
     * @param flag boolean
     * @return JSONObject
     */
    public static JSONObject msg(boolean flag) {
        return msg(flag, flag ? "操作成功 !" : "操作失败 !", null);
    }

    /**
     * 根据布尔值变量指定响应消息
     *
     * @param flag    boolean
     * @param message String
     * @return JSONObject
     */
    public static JSONObject msg(boolean flag, String message) {
        return msg(flag, message, null);
    }

    /**
     * 根据布尔值变量, 指定消息以及返回数据
     *
     * @param flag    boolean
     * @param message String
     * @param object  Object
     * @return JSONObject
     */
    public static JSONObject msg(boolean flag, String message, Object object) {
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("success", flag);
        jsonObject.put("message", message);
        if (object != null) {
            jsonObject.put("data", object);
        }
        return jsonObject;
    }

    /**
     * 将数组以指定的符号组合成字符串
     *
     * @param limiter
     * @param arr
     * @param <T>
     * @return
     */
    public static <T> String array2String(String limiter, T[] arr) {
        if (limiter == null) {
            throw new RuntimeException("limiter分隔符不能为空！");
        }
        StringBuilder str = new StringBuilder();
        int index = 0;
        for (T t : arr) {
            str.append(t.toString());
            if (index != arr.length - 1) {
                str.append(limiter);
            }
            index++;
        }
        return str.toString();
    }

    /**
     * 将数组以","组合成字符串
     *
     * @param arr
     * @param <T>
     * @return
     */
    public static <T> String array2String(T[] arr) {
        return array2String(",", arr);
    }
}
